package model;

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import entidade.Cartao;

@SuppressWarnings("serial")
public class CartaoTableModel extends AbstractTableModel {

	// constantes que vão representar as colunas
	// (só para facilitar o entendimento do código)
	private final int COL_CODIGO = 0;
	private final int COL_TERMINO = 1;
	private final int COL_NUMERO = 2;
	private final int COL_BANCO = 3;
	private final int COL_BANDEIRA = 4;
	private final int COL_VALIDADE = 5;

	// lista dos produtos que serão exibidos
	private List<Cartao> cartoes;

	public CartaoTableModel() {
		cartoes = new ArrayList<>();
	}

	public CartaoTableModel(List<Cartao> lista) {
		this();
		cartoes.addAll(lista);
	}

	public int getRowCount() {
		// cada produto na lista será uma linha
		return cartoes.size();
	}

	public int getColumnCount() {
		// vamos exibir só Nome e Quantidade, então só 2 colunas
		return 6;
	}

	@Override
	public String getColumnName(int column) {
		// qual o nome da coluna
		switch (column) {
		case COL_CODIGO:
			return "C\u00F3digo";
		case COL_TERMINO:
			return "Final";
		case COL_NUMERO:
			return "N\u00FAmero";
		case COL_BANCO:
			return "Banco";
		case COL_BANDEIRA:
			return "Bandeira";
		case COL_VALIDADE:
			return "Validade";
		}
		return "";
	}

	@Override
	public Class<?> getColumnClass(int columnIndex) {
		// retorna a classe que representa a coluna
		switch (columnIndex) {
		case COL_CODIGO:
			return Integer.class;
		case COL_TERMINO:
			return String.class;
		case COL_NUMERO:
			return String.class;
		case COL_BANCO:
			return String.class;
		case COL_BANDEIRA:
			return String.class;
		case COL_VALIDADE:
			return String.class;
		}
		return String.class;
	}

	public Object getValueAt(int rowIndex, int columnIndex) {
		// pega o produto da linha
		Cartao c = cartoes.get(rowIndex);

		// verifica qual valor deve ser retornado
		switch (columnIndex) {
		case COL_CODIGO:
			return c.getCodigo();
		case COL_TERMINO:
			return c.getTermino();
		case COL_NUMERO:
			return c.getNumero();
		case COL_BANCO:
			return c.getBanco();
		case COL_BANDEIRA:
			return c.getBandeira();
		case COL_VALIDADE:
			return c.getValidade();
		}
		return "";
	}

	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		// pega o produto da linha
		Cartao c = cartoes.get(rowIndex);

		// verifica qual valor vai ser alterado
		switch (columnIndex) {
		case COL_CODIGO:
			c.setCodigo(Integer.parseInt(aValue.toString()));
		case COL_TERMINO:
			c.setTermino(aValue.toString());
		case COL_NUMERO:
			c.setNumero(aValue.toString());
		case COL_BANCO:
		    c.setBanco(aValue.toString());
		case COL_BANDEIRA:
			c.setBandeira(aValue.toString());
		case COL_VALIDADE:
			c.setValidade(aValue.toString());
		}		
		// avisa que os dados mudaram
		fireTableDataChanged();
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// no nosso caso todas vão ser editáveis, entao retorna true pra todas
		return false;
	}

	public Cartao get(int pos) {
		return cartoes.get(pos);
	}

}
